package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.StudentTeachClassEntity;
import com.tfjybj.itoo.teach.model.StudentModel;
import com.tfjybj.itoo.teach.model.TeacherTeachClassModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * StudentTeachClassService接口
 * studentTeachClass表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface StudentTeachClassService extends BaseServicePlus<StudentTeachClassEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据学生_id模糊查询studentTeachClass
     *
     * @param studentId  学生_id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的studentTeachClass
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<StudentTeachClassEntity> queryByLikeStudentId(String studentId, Integer pageNo, Integer pageSize);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据学生ID删除上课班对应的学生信息
     *
     * @param studentIds  学生id
     * @param teachClassId  上课班id
     * @param operator  操作者
     * @return int
     * @author 严文文
     * @since 2.0.0 2 22018-11-14 09:39:01
     */
     int deleteStudentTeachClass(List<String> studentIds, String teachClassId, String operator);

    /**
     * 根据学生ID单个删除上课班对应的学生信息
     * @param studentId 学生ID
     * @param teachClassId 上课班id
     * @param operator 操作者
     * @return boolean
     * @author 严文文
     * @since 2.0.0 2 2018-12-5 16:17:07
     */
    boolean deleteSingleStudentTeachClass(String studentId, String teachClassId, String operator);

    /**
     * 根据学生id查找上课班Ids
     *
     * @param studentId 学生id
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-18 16:17:20
     */

    List<String> findTeachClassIdsByStudentId(String studentId);

    /**
     * 根据学生id查找上课班CourseID
     *
     * @param studentId 学生id
     * @return String
     * @author 胡泽宽
     * @since 2.0.0 2018年11月19日
     */
     List<String> querycourseIDBystudentid(String studentId);


    /**
     * 根据学生ID删除上课班对应的学生信息
     *
     * @param studentId  学生id
     * @param teachClassId  上课班id
     * @return  Boolean
     * @author 胡泽宽
     * @since 2.0.0 2 2018年11月24日 20:44:39
     */
    Boolean deleteStudentTeachClassbyId(String studentId, String teachClassId);
    /**
     * 根据学生ID和上课班id添加到学生上课班表
     *
     * @param studentId   学生ID
     * @param teachClassId  上课班id
     * @return boolean
     * @author 胡泽宽
     * @since 2.0.0 2 2018年11月25日 10:04:09
     */
    boolean createBystudentid(String studentId, String teachClassId);
    /**
     * 分页根据关键词模糊查询某上课班下的学生姓名
     *
     * @param strLike   关键词模糊
     * @param teachClassId  上课班id
     * @param pageNum  页码
     * @param pageSize  页数
     * @return StudentModel
     * @author 严文文
     * @since 2.0.0 2018-11-23 20:56:40
     */
    PageInfo<StudentModel>  queryTeachClassStudentInfoByNameStrLike(String strLike, String teachClassId, Integer pageNum, Integer pageSize);

    /**
     * 分页根据关键词模糊查询某上课班下的学生姓名,学号
     *
     * @param studentName  学生姓名
     * @param studentCode   学生学号
     * @param teachClassId   上课班id
     * @param pageNum 页码
     * @param pageSize 页数
     * @return StudentModel
     * @author 严文文
     * @since 2.0.0 2018-11-24 08:59:38
     */
    PageInfo<StudentModel>queryTeachClassStudentInfoByNameAndCodeStrLike(String studentName, String studentCode, String teachClassId, Integer pageNum, Integer pageSize);

    /**
     * 下载上课班-学生管理表模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 严文文
     * @since 2.0.0 2018-11-25 18:14:52
     */
    boolean downLoadStudentTeachClassTemplate (HttpServletResponse response);

    /**
     * 批量导上课班-学生管理表
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @return ItooResult 批量导入的结果
     * @author 严文文
     * @since 2.0.0 2018-11-27 10:58:03
     */
    ItooResult importStudentTeachClassByTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response, String teachClassId);

    /**
     * 根据学生id和上课班id查询id
     * @param studentId 学生id
     * @param teachClassId 上课班id
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-27 10:58:03
     */
    String findIdIsExist(String studentId, String teachClassId);

/**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 课程信息model
     * @author 严文文
     * @since 2018年11月30日11:32:54
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);

   /**
     *校验学生是否重复添加
     * @param studentId  学生id
     * @return Boolean
     * @author 胡泽宽
     * @since 2.0.0 2018年12月2日 16:20:20
     */
    Boolean checkByStudentCode(String studentId);

    /**
     * 根据学生ID和上课班ID查询id
     * @param studentId 学生id
     * @param teachClassId  上课班id
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-12-5 16:22:45
     */
    String queryIdByStudentIdAndteachClassId(String studentId, String teachClassId);

    /**
     * 添加学生信息根据学生id和上课班集合
     *
     * @param studentId 学生id
     * @param teachClassIds 上课班id集合
     * @return boolean
     * @author 严文文
     * @since 2.0.0 2018-12-8 10:05:42
     */
    boolean createByStudentidAndTeachClassIds(String studentId, List<String> teachClassIds);

    /**
     * 根据上课班id查询学生信息
     * @param teachClassId
     * @return 学生姓名list
     * @author 郝雨烁
     * @since 0.0.1 2019年3月6日16:34:48
     */
    List<TeacherTeachClassModel> queryStudents(String teachClassId);

    /**
     * 根据上课班id和学生id删除这个学生
     * @param teachClassId
     * @param studentId
     * @return
     * @author 郝雨烁
     * @since 0.0.1 2019年3月7日21:33:41
     */
    boolean deleteStudentInGroups(String teachClassId, String studentId);
}
